package fanxing.lianxi.demo05;

import java.util.Arrays;

public class MyAeelyList <T>{
    public Object[] getElementDate() {
        return elementDate;
    }

    public void setElementDate(Object[] elementDate) {
        this.elementDate = elementDate;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    private static final int  defaulefth = 10;
    private Object[] elementDate;   //这里存储元素的数组
    private int size;

    //构造方法
    public MyAeelyList() {
        this.elementDate = elementDate;
    }
    //带初始变量的构造方法   这里带初始变量  是因为 性能优化
    public MyAeelyList(int chushu){
        if (chushu > 0){
            this.elementDate = new Object[chushu];
        }else if(chushu == 0){
            this.elementDate = new Object[0];
        }else {
            System.out.println("错误容量" + chushu);
        }
    }

    //开始扩容
    private void flashbox(int rouliang){
        if (rouliang > elementDate.length){
           int capacity = elementDate.length;
           int xindecity = capacity * 2;

           //还有一种情况 如果初始值为 0 的情况下
            if (xindecity < rouliang){
                xindecity = rouliang;
            }
            //这里进行 数组的复制
            Object[] copyOf = Arrays.copyOf(elementDate, xindecity);
        }
    }

    // 索引是否越界检查
    private void rangeCheck(int index) {
        if (index >= size || index < 0) {
            throw new IndexOutOfBoundsException("索引: " + index + ", 大小: " + size);
        }
    }

    // 添加操作的索引检查（允许等于size）
    private void rangeCheckForAdd(int index) {
        if (index > size || index < 0){
            System.out.println("索引" + index + "大小" + size );
        }
    }

    //开始添加数组元素
    public void add (int index,T element){
        rangeCheckForAdd(index);
        rangeCheck(size + 1);

        elementDate[index] = element; // 这里放入新的值
        size ++ ;
    }

    //删除
    public int remove(int index){

        rangeCheck(index); // 这里调用上面的  reangecheck  方法查看索引
        int oldv =index;

        int count = size - index - 1;
        if (count > 0){
            System.arraycopy(elementDate,index + 1,this.elementDate,index,count);
        }
        return oldv;
    }

    //这里判断是否为空
    public boolean isEmpty(){
        return size==0;
    }

    public int size() {
        return size;
    }
}
